﻿using System.Collections.Generic;

namespace Kyoh.Lib.Excel
{
    /// <summary>ページのヘッダ・フッタを表す <see cref="Page"/> オブジェクトのコレクション。</summary>
    public class Pages : Component, IEnumerable<Page>
    {
        private Pages(object obj, Component parent)
			: base(obj, parent) { }

        /// <summary>Excel COM オブジェクトで、新しいインスタンスを初期化します。</summary>
        /// <param name="obj">Excel COM オブジェクト</param>
        /// <param name="parent">親となる <see cref="Component"/> オブジェクト。</param>
        internal static Pages Create(object obj, Component parent)
        {
            return obj == null ? null : new Pages(obj, parent);
        }

        /// <summary>要素の個数を取得します。</summary>
        public int Count
        {
            get { return (int)base.GetProperty("Count"); }
        }

        /// <summary>インデックスを指定して要素を取得します。</summary>
        /// <param name="Index">インデックス。</param>
        public Page this[int Index]
        {
            get { return Page.Create(base.GetProperty("Item", Index), this); }
        }

        /// <summary>要素を列挙します。</summary>
        /// <returns>リストの要素である <see cref="Page"/> オブジェクトを列挙する <see cref="IEnumerator{T}"/>。</returns>
        public IEnumerator<Page> GetEnumerator()
        {
            var list = (System.Collections.IEnumerator)base.InvokeMethod("GetEnumerator");
            list.Reset();
            while (list.MoveNext())
                yield return Page.Create(list.Current, this);
        }

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            var list = (System.Collections.IEnumerator)base.InvokeMethod("GetEnumerator");
            list.Reset();
            while (list.MoveNext())
                yield return Page.Create(list.Current, this);
        }
    }
}
